package paneles;


import arreglos.EmpleadoArrayList;
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JSpinnerDateEditor;
import constantes.Constantes;
import entidades.Empleado;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import principal.Principal;
import util.Utilitarios;
import util.Validaciones;

public class PanelAgregarEmpleado extends JPanel implements ActionListener {

	private JLabel lblAgregarEmpleadoTitulo;
	// ///Datos del formulario
//Datos de persona
	private JLabel lblNombreEmpleado;
	private JLabel lblApePaternoEmpleado;
	private JLabel lblApeMaternoEmpleado;
	private JLabel lblDNI;
	private JLabel lblDireccionEmpleado;
	private JLabel lblFechaNacimientoEmpleado;
	private JLabel lblTelefono;	
	private JLabel lblEmail;
	
//Datos de clase empleado	
	private JLabel lblLogin;
	private JLabel lblClaveSistema;	
	private JLabel lblPerfilEmpleado;
	private JLabel lblEstadoEmpleado;
	
	

	private JTextField txtNombreEmpleado;
	private JTextField txtApePaternoEmpleado;
	private JTextField txtApeMaternoEmpleado;
	private JTextField txtDNI;
	private JTextField txtDireccionEmpleado;
	private JDateChooser txtFechaNacimientoEmpleado;
	private JTextField txtTelefono;
	private JTextField txtEmail;
	
	private JTextField txtLogin;
	private JPasswordField txtClaveSistema;	
	private JComboBox cboPerfilEmpleado;
	private JComboBox cboEstadoEmpleado;
	
	
	
	private JButton btnAgregarEmpleado;
	private JButton btnLimpiarEmpleado;
	private JInternalFrame agregarEmpleado;

	public PanelAgregarEmpleado(Principal pAppletPrincipal,
			JInternalFrame pAgregarCliente) {

		this.agregarEmpleado = pAgregarCliente;

		lblAgregarEmpleadoTitulo = new JLabel("Nuevo empleado", JLabel.CENTER);
		lblAgregarEmpleadoTitulo.setBounds(0, 35, 500, 35);
		lblAgregarEmpleadoTitulo.setForeground(Color.red);
		lblAgregarEmpleadoTitulo.setOpaque(true);
		// lblAgregarClienteTitulo.setBackground(Color.white);
		lblAgregarEmpleadoTitulo.setFont(new Font("Dialog", Font.BOLD, 18));
		this.add(lblAgregarEmpleadoTitulo);

		lblNombreEmpleado = new JLabel("Nombres:", JLabel.RIGHT);
		lblNombreEmpleado.setBounds(0, 75, 210, 25);
		lblNombreEmpleado.setForeground(Color.red);
		lblNombreEmpleado.setOpaque(true);
		// lblNombreCliente.setBackground(Color.white);
		lblNombreEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblNombreEmpleado);

		lblApePaternoEmpleado = new JLabel("Apellido paterno:", JLabel.RIGHT);
		lblApePaternoEmpleado.setBounds(0, 100, 210, 25);
		lblApePaternoEmpleado.setForeground(Color.red);
		lblApePaternoEmpleado.setOpaque(true);
		// lblApePaternoCliente.setBackground(Color.white);
		lblApePaternoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblApePaternoEmpleado);

		lblApeMaternoEmpleado = new JLabel("Apellido materno:", JLabel.RIGHT);
		lblApeMaternoEmpleado.setBounds(0, 125, 210, 25);
		lblApeMaternoEmpleado.setForeground(Color.red);
		lblApeMaternoEmpleado.setOpaque(true);
		// lblApeMaternoCliente.setBackground(Color.white);
		lblApeMaternoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblApeMaternoEmpleado);

		lblDNI = new JLabel("DNI:", JLabel.RIGHT);
		lblDNI.setBounds(0, 150, 210, 25);
		lblDNI.setForeground(Color.red);
		lblDNI.setOpaque(true);
		// lblTelefonoCliente.setBackground(Color.white);
		lblDNI.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblDNI);

		lblDireccionEmpleado = new JLabel("Direccion:", JLabel.RIGHT);
		lblDireccionEmpleado.setBounds(0, 175, 210, 25);
		lblDireccionEmpleado.setForeground(Color.red);
		lblDireccionEmpleado.setOpaque(true);
		lblDireccionEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblDireccionEmpleado);

		lblFechaNacimientoEmpleado = new JLabel("Fecha nacimiento:",
				JLabel.RIGHT);
		lblFechaNacimientoEmpleado.setBounds(0, 200, 210, 25);
		lblFechaNacimientoEmpleado.setForeground(Color.red);
		lblFechaNacimientoEmpleado.setOpaque(true);
		lblFechaNacimientoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblFechaNacimientoEmpleado);

		lblTelefono = new JLabel("Telefono:", JLabel.RIGHT);
		lblTelefono.setBounds(0, 225, 210, 25);
		lblTelefono.setForeground(Color.red);
		lblTelefono.setOpaque(true);
		lblTelefono.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblTelefono);
		
		lblEmail = new JLabel("Email:", JLabel.RIGHT);
		lblEmail.setBounds(0, 250, 210, 25);
		lblEmail.setForeground(Color.red);
		lblEmail.setOpaque(true);
		lblEmail.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblEmail);
		
		lblLogin = new JLabel("Login:", JLabel.RIGHT);
		lblLogin.setBounds(0, 275, 210, 25);
		lblLogin.setForeground(Color.red);
		lblLogin.setOpaque(true);
		lblLogin.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblLogin);

		lblClaveSistema = new JLabel("Clave", JLabel.RIGHT);
		lblClaveSistema.setBounds(0, 300, 210, 25);
		lblClaveSistema.setForeground(Color.red);
		lblClaveSistema.setOpaque(true);
		lblClaveSistema.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblClaveSistema);
		
		lblPerfilEmpleado = new JLabel("Perfil", JLabel.RIGHT);
		lblPerfilEmpleado.setBounds(0, 325, 210, 25);
		lblPerfilEmpleado.setForeground(Color.red);
		lblPerfilEmpleado.setOpaque(true);
		lblPerfilEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblPerfilEmpleado);
		
		lblEstadoEmpleado = new JLabel("Estado", JLabel.RIGHT);
		lblEstadoEmpleado.setBounds(0, 350, 210, 25);
		lblEstadoEmpleado.setForeground(Color.red);
		lblEstadoEmpleado.setOpaque(true);
		lblEstadoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblEstadoEmpleado);
		
		

		txtNombreEmpleado = new JTextField();
		txtNombreEmpleado.setBounds(215, 75, 200, 20);
		txtNombreEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtNombreEmpleado);

		txtApePaternoEmpleado = new JTextField();
		txtApePaternoEmpleado.setBounds(215, 100, 200, 20);
		txtApePaternoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtApePaternoEmpleado);

		txtApeMaternoEmpleado = new JTextField();
		txtApeMaternoEmpleado.setBounds(215, 125, 200, 20);
		txtApeMaternoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtApeMaternoEmpleado);

		txtDNI = new JTextField();
		txtDNI.setBounds(215, 150, 200, 20);
		txtDNI.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtDNI);

		txtDireccionEmpleado = new JTextField();
		txtDireccionEmpleado.setBounds(215, 175, 200, 20);
		txtDireccionEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtDireccionEmpleado);

		txtFechaNacimientoEmpleado = new JDateChooser(null, null, null,
				new JSpinnerDateEditor());
		txtFechaNacimientoEmpleado.setBounds(215, 200, 200, 20);
		txtFechaNacimientoEmpleado.setFont(new Font("Dialog", Font.BOLD, 12));
		/*
		 * Establece la fecha maxima de seleccion para el año de nacimiento
		 */
		Date date = Utilitarios.FechaMaximaDeSeleccion();
		txtFechaNacimientoEmpleado.setMaxSelectableDate(date);
		txtFechaNacimientoEmpleado.setDate(date);
		this.add(txtFechaNacimientoEmpleado);

				
		txtTelefono = new JTextField();
		txtTelefono.setBounds(215, 225, 200, 20);
		txtTelefono.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtTelefono);

		txtEmail = new JTextField();
		txtEmail.setBounds(215,250, 200, 20);
		txtEmail.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtEmail);

		
		txtLogin = new JTextField();
		txtLogin.setBounds(215, 275, 200, 20);
		txtLogin.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtLogin);

		txtClaveSistema = new JPasswordField();
		txtClaveSistema.setBounds(215, 300, 200, 20);
		txtClaveSistema.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtClaveSistema);
		
		cboPerfilEmpleado = new JComboBox();
		cboPerfilEmpleado.setBounds(215, 325, 200, 20);
		cboPerfilEmpleado.addItem("Administrador");
		cboPerfilEmpleado.addItem("Vendedor");           
		cboPerfilEmpleado.addActionListener(this);
        this.add(cboPerfilEmpleado);
        
        cboEstadoEmpleado = new JComboBox();
        cboEstadoEmpleado.setBounds(215, 350, 200, 20);
        cboEstadoEmpleado.addItem("Deshabilitado");
        cboEstadoEmpleado.addItem("Habilitado");        
        cboEstadoEmpleado.addActionListener(this);
        this.add(cboEstadoEmpleado);
        
        
		//Botones
		
		btnAgregarEmpleado = new JButton("Grabar");
		btnAgregarEmpleado.setBounds(150, 375, 90, 30);
		btnAgregarEmpleado.addActionListener(this);
		this.add(btnAgregarEmpleado);

		btnLimpiarEmpleado = new JButton("Limpiar");
		btnLimpiarEmpleado.setBounds(250, 375, 90, 30);
		btnLimpiarEmpleado.addActionListener(this);
		this.add(btnLimpiarEmpleado);
	}

	public void actionPerformed(ActionEvent e) {

		if (e.getSource() == btnAgregarEmpleado) {
			AgregarDatosEmpleado();
		}
		if (e.getSource() == btnLimpiarEmpleado) {
			LimpiarDatosEmpleado();
		}
	}

	private void LimpiarDatosEmpleado() {
		txtNombreEmpleado.setText("");
		txtApePaternoEmpleado.setText("");
		txtApeMaternoEmpleado.setText("");
		txtDNI.setText("");
		txtDireccionEmpleado.setText("");
		txtTelefono.setText("");
		txtLogin.setText("");
		txtClaveSistema.setText("");
		txtEmail.setText("");		
		txtNombreEmpleado.requestFocus();		
	}

	/* Permite agregar un cliente */
	private void AgregarDatosEmpleado() {
		Empleado empleado = null;
		EmpleadoArrayList empleadoArrayList = null;
		try {
			empleado = new Empleado();
			empleado.setNombre(txtNombreEmpleado.getText().trim());
			empleado.setApellidoPaterno(txtApePaternoEmpleado.getText().trim());
			empleado.setApellidoMaterno(txtApeMaternoEmpleado.getText().trim());
			empleado.setDni(txtDNI.getText().trim());
			empleado.setTelefono(txtTelefono.getText().trim());
			empleado.setDireccion(txtDireccionEmpleado.getText().trim());
			empleado.setEmail(txtEmail.getText().trim());
			empleado.setLogin(txtLogin.getText().trim());
			empleado.setClaveAccesoSistema(txtClaveSistema.getText().trim());
			
			Date date = txtFechaNacimientoEmpleado.getDate();
			String fecha = Utilitarios.FormatearFechaCadena(date);
			empleado.setFechaNacimiento(fecha);
			
			empleado.setEstadoEmpleado(cboEstadoEmpleado.getSelectedIndex()+"");
			empleado.setPerfilEmpleado(cboPerfilEmpleado.getSelectedIndex()+"");
			
			empleadoArrayList = new EmpleadoArrayList();

			if (ValidarFormularioAgregarEmpleados(empleado)) {
				// Datos enteros
				
				
				int codigo = empleadoArrayList.AgregarEmpleado(empleado);
				
				if (codigo == Constantes.ERROR_YA_EXISTE_DNI_AGREGAR) {
					Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
							"Ya se ingreso un empleado con el mismo DNI");
				} else {
					Utilitarios.MostrarMensajeInformacion(agregarEmpleado,
							"Se agrego un empleado correctamente");
					LimpiarDatosEmpleado();
				}
			}

			

		} catch (Exception ex) {
		}
	}

	private boolean ValidarFormularioAgregarEmpleados(Empleado pEmpleado) {
		boolean resultado = false;
		/* Comprobar si los campos estan vacios */
		if (pEmpleado.getNombre().equals("")) {
			txtNombreEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado, "Ingrese nombre");
			return false;
		}
		if (pEmpleado.getApellidoPaterno().equals("")) {
			txtApePaternoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"Ingrese apellido paterno");
			return false;
		}
		if (pEmpleado.getApellidoMaterno().equals("")) {
			txtApeMaternoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"Ingrese apellido materno");
			return false;
		}

		if (pEmpleado.getDni().equals("")) {
			txtDNI.requestFocus();
			Utilitarios
					.MostrarMensajeAlerta(agregarEmpleado, "Ingrese DNI");
			return false;
		}
		if (pEmpleado.getTelefono().equals("")) {
			txtTelefono.requestFocus();
			Utilitarios
					.MostrarMensajeAlerta(agregarEmpleado, "Ingrese telefono");
			return false;
		}
		if (pEmpleado.getDireccion().equals("")) {
			txtDireccionEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"Ingrese direccion");
			return false;
		}

		if (pEmpleado.getFechaNacimiento().equals("")) {
			txtFechaNacimientoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"Ingrese fecha nacimiento");
			return false;
		}

		/* Comprobar si los datos estan bien ingresados */
		if (!(Validaciones.validarNombres(pEmpleado.getNombre()))) {
			txtNombreEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El nombre no es valido");
			return false;
		}
		if (!(Validaciones.validarLongitudCampo(pEmpleado.getNombre(),
				Constantes.longitudNombre, Constantes.longitudMenor_Que))) {
			txtNombreEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El nombre no tiene una longitud valida");
			return false;
		}
		if (!(Validaciones.validarNombres(pEmpleado.getApellidoPaterno()))) {
			txtApePaternoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El apellido paterno no es valido");
			return false;
		}
		if (!(Validaciones.validarLongitudCampo(pEmpleado.getApellidoPaterno(),
				Constantes.longitudApePat, Constantes.longitudMenor_Que))) {
			txtApePaternoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El apellido paterno no tiene una longitud valida");
			return false;
		}
		if (!(Validaciones.validarNombres(pEmpleado.getApellidoMaterno()))) {
			txtApeMaternoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El apellido materno no es valido");
			return false;
		}
		if (!(Validaciones.validarLongitudCampo(pEmpleado.getApellidoMaterno(),
				Constantes.longitudApeMat, Constantes.longitudMenor_Que))) {
			txtApeMaternoEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El apellido materno no tiene una longitud valida");
			return false;
		}

		if (!(Validaciones.validarSoloNumeros(pEmpleado.getTelefono()))) {
			txtTelefono.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El telefono no es valido");
			return false;
		}
		if (!(Validaciones.validarSoloNumeros(pEmpleado.getDni()))) {
			txtDNI.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El DNI no es valido");
			return false;
		}
		if (!(Validaciones.validarLongitudCampo(pEmpleado.getDni(),
				Constantes.longitudDni, Constantes.longitudIgual_A))) {
			txtDNI.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El DNI no tiene una longitud valida");
			return false;
		}
		if (!(Validaciones.validarDireccion(pEmpleado.getDireccion()))) {
			txtDireccionEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"La  direccion no es valida");
			return false;
		}
		if (!(Validaciones.validarLongitudCampo(pEmpleado.getDireccion(),
				Constantes.longitudDireccion, Constantes.longitudMenor_Que))) {
			txtDireccionEmpleado.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"La  direccian no tiene una longitud valida");
			return false;
		}

		if (pEmpleado.getLogin().equals("")) {
			txtLogin.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El numero de tarjeta es solo numeros");
			return false;
		}

		if (pEmpleado.getClaveAccesoSistema().equals("")) {
			txtClaveSistema.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El valor de los puntos no es valido");
			return false;
		}
		
		if (!(Validaciones.validarEmail(txtEmail.getText().trim()))) {
			txtEmail.requestFocus();
			Utilitarios.MostrarMensajeAlerta(agregarEmpleado,
					"El email no es valido");
			return false;
		}

		resultado = true;

		return resultado;
	}
}
